/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.mechanics;

import com.camachosanchez.bean.Egresos;
import com.camachosanchez.bean.Neumaticos;
import com.camachosanchez.controler.jpa.NeumaticosJpaController;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import javax.imageio.ImageIO;

/**
 *
 * @author Rolando
 */
public class Llanta implements Cloneable {

    private int idNeumatico;
    private int idCategoria;
    private int w_contenedor;
    private int h_contenedor;
    private int origen;
    private Eje eje;
    private int x;
    private int y;
    private BufferedImage llanta;
    private Egresos egreso = null;
    public boolean cadenaPosicion;
    public String codigo;
    public String descripcion;
    private int posicionInicial;

    public Llanta(int idNeumatico) {
        this.idNeumatico = idNeumatico;
    }

    public Llanta(Eje eje, int idNeumatico, int w_contenedor, int h_contenedor) {
        try {
            if (eje != null) {
                this.eje = eje;
                this.x = eje.getX();
                this.y = eje.getY();
            }
            this.idNeumatico = idNeumatico;
            this.w_contenedor = w_contenedor;
            this.h_contenedor = h_contenedor;
            InputStream in = getClass().getResourceAsStream("/com/camachosanchez/recursos/tire.jpg");
//            JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
//            llanta = decoder.decodeAsBufferedImage();
            llanta = ImageIO.read(in);
            this.idCategoria = 0;
            setDescripcion();
        } catch (Exception e) {
            e.printStackTrace();
        }
        cadenaPosicion = false;
    }

    public void setCadenaPosicion(boolean cadenaPosicion) {
        this.cadenaPosicion = cadenaPosicion;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Eje getEje() {
        return eje;
    }

    public void setEje(Eje eje) {
        this.eje = eje;
    }

    public int getH_contenedor() {
        return h_contenedor;
    }

    public void setH_contenedor(int h_contenedor) {
        this.h_contenedor = h_contenedor;
    }

    public int getIdNeumatico() {
        return idNeumatico;
    }

    public void setIdNeumatico(int idNeumatico) {
        this.idNeumatico = idNeumatico;
    }

    public int getOrigen() {
        return origen;
    }

    public void setOrigen(int origen) {
        this.origen = origen;
    }

    public int getW_contenedor() {
        return w_contenedor;
    }

    public void setW_contenedor(int w_contenedor) {
        this.w_contenedor = w_contenedor;
    }

    public int getIdCategoria() {
        return idCategoria;
    }

    public void setIdCategoria(int idCategoria) {
        this.idCategoria = idCategoria;
    }

    public Egresos getEgreso() {
        return egreso;
    }

    public void setEgreso(Egresos egreso) {
        this.egreso = egreso;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public int getPosicionInicial() {
        return posicionInicial;
    }

    public void setPosicionInicial(int posicionInicial) {
        this.posicionInicial = posicionInicial;
    }

    private void setDescripcion() {
        NeumaticosJpaController nc = new NeumaticosJpaController(null);
        Neumaticos n = nc.findNeumaticos(idNeumatico);
        if (n != null) {
            descripcion = "<html>Código: " + n.getCodigo()
                    + "<br>Número de Serie: " + ((n.getNumSerie() == null) ? "" : n.getNumSerie())
                    + "<br>Código de barras: " + ((n.getCodBarras() == null) ? "" : n.getCodBarras())
                    + "<br>Número de factura: " + ((n.getNumFactura() == null) ? "" : n.getNumFactura())
                    + "<br>Número de reencauches: " + ((n.getNumRenovaciones() == null) ? "" : n.getNumRenovaciones())
                    + "<br>Modelo de banda: " + ((n.getIdModelo() == null) ? "" : n.getIdModelo().getMedida());
        }
    }

    public boolean estaDentro(Point p) {
//        if(p.x<x || (p.x>(x+ancho)))
        int ancho = eje.getAncho();
        int alto = eje.getAlto();
        Rectangle r = new Rectangle(x, y, ancho, alto);
        return r.contains(p);
    }

    public void graficarAdvertencia(Graphics2D graphics) {
        if (egreso != null) {
            int ancho = eje.getAncho() / 2;
            int alto = eje.getAlto() / 2;
            Polygon p = new Polygon();
            p.addPoint((x - 8) + ancho, (y + 6) + alto);
            p.addPoint(x + ancho, y + alto - 6);
            p.addPoint((x + 8) + ancho, (y + 6) + alto);
            graphics.setColor(Color.yellow);
            graphics.fillPolygon(p);
            graphics.setColor(Color.black);
            Font fontOld = graphics.getFont();
            Font fontNew = new Font("SansSerif", Font.BOLD, 10);
            graphics.setFont(fontNew);
            graphics.drawString("$", x + ancho - 2, y + alto + 5);
            graphics.drawPolygon(p);
            graphics.setFont(fontOld);
//            Image imagen = (new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/warning.png"))).getImage();
//            graphics.drawImage(imagen, x + (ancho / 2) - 6, y + (alto / 2) - 6, null);
        }
    }

    public void graficar(Graphics2D graphics) {
        try {
            int ancho = eje.getAncho();
            int alto = eje.getAlto();
            x = x < 20 ? 20 : x;
            y = y < 20 ? 20 : y;
            x = x + ancho + 20 > w_contenedor ? w_contenedor - ancho - 20 : x;
            y = y + alto + 20 > h_contenedor ? h_contenedor - alto - 20 : y;
            graphics.setColor(Color.black);
            RoundRectangle2D r = new RoundRectangle2D.Float(x + 1, y + 1, ancho - 2, alto - 2, 20, 20);
            Rectangle2D tr = new Rectangle2D.Double(x + 1, y + 1, ancho - 2, alto - 2);
            TexturePaint tp = new TexturePaint(llanta, tr);
            Paint old = graphics.getPaint();
            graphics.setPaint(tp);
            graphics.fill(r);
            graphics.setPaint(old);
            graphics.setFont(new Font("Arial", Font.PLAIN, 16));
            FontMetrics fontMetrics = graphics.getFontMetrics();
            if (cadenaPosicion) {
                String posicion = eje.getPosicion() < 1 ? "R" : "" + eje.getPosicion();
                int width = fontMetrics.stringWidth(posicion);
                int height = fontMetrics.getHeight();
                graphics.setColor(Color.white);
                graphics.drawString(posicion, x + ((ancho - width) / 2), y - 3 + ((alto + height) / 2));
            }
            graphics.setColor(Color.black);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String toString() {
        return "Llanta{" + "posicion=" + eje.getPosicion() + ", id=" + idNeumatico + '}';
    }

    @Override
    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) { // No deberia suceder
            e.printStackTrace();
        }
        return clone;
    }
}
